package optimizacion;

public class CromosomaFuncion5 extends Cromosoma{
    
	final double min = -10;
	final double max = 10;
	
    public CromosomaFuncion5(int numGenes, double tolerancia){
    	super(numGenes, tolerancia);
    	this.numGenes = numGenes;
    	this.tolerancia = tolerancia;
        crearGenes(min, max);
        calcularLongitud();
       }


   	public CromosomaFuncion5(){
   		super();
   	}
   	
   	@Override
   	public double calcularAptitud() {  
   		double[] fenotipos = new double[numGenes];
   		
   		fenotipos[0] = calcularFenotipoIesimo(min, max, 0);
    	fenotipos[1] = calcularFenotipoIesimo(min, max, 1);
    	aptitud =  Funciones.f5(fenotipos);
    	aptitudRev = aptitud;
    	aptitudEscaladoLineal = aptitud;
    	return aptitud;
   	}
   	
   	
   	public double revisarAptitud(double cmax) {   
   		aptitudRev =  calcularAptitudRevisadaMinimizacion(cmax);
   		aptitudEscaladoLineal = aptitudRev;
       	return aptitudRev;
   	}    
   	
   	public CromosomaFuncion5 clone (){
   		CromosomaFuncion5 crom = new CromosomaFuncion5();
   	
   		crom.numGenes = numGenes;
   		crom.longitud = longitud;
   		crom.aptitud = aptitud;
   		crom.aptitudRev = aptitudRev;
   		crom.aptitudEscaladoLineal = aptitudEscaladoLineal;
   		crom.puntuacion = puntuacion;
   		crom.puntuacionAcumulada = puntuacionAcumulada;
   		crom.tolerancia = tolerancia;
   		
   		crom.genes = new GenBinario[longitud];
   		
   		for (int i = 0; i < numGenes; i++)
   			crom.genes[i] = genes[i].clone();    	
   		
   		return crom;
   	}
}
